
/**
 * Representa um sentido, com base em valores XY,<br/>
 * criada para auxiliar nas anlise de trajetorias.
 * 
 * @author Edgard
 * @since 01/11/2011
 */
public class Vector implements Comparable<Vector> {
	private int _x = 0, _y = 0, _centerY = 0, _centerX = 0;

	/**
	 * 
	 * @author edgardleal
	 * @since 01/11/2011
	 * @param x
	 * @param y
	 */
	public Vector(int x, int y) {
		this._x = x;
		this._y = y;
	}

	/**
	 * 
	 * @author edgardleal
	 * @since 01/11/2011
	 * @param centralX
	 * @param centralY
	 * @param x
	 * @param y
	 */
	public Vector(int centralX, int centralY, int x, int y) {
		this._x = x;
		this._y = y;
		this._centerX = centralX;
		this._centerY = centralY;
	}

	/**
	 * Retorna um caractere representando a direo para a qual este vetor
	 * aponta,<br/>
	 * o caractere retorna segue o padro da classe {@link Aim}
	 * 
	 * @author edgardleal
	 * @since 01/11/2011
	 * @return uma das quators possibilidades w s e n
	 */
	public char getSimbol() {
		int difX = Math.abs(_centerX - _x);
		int difY = Math.abs(_centerY - _y);
		if (difX > difY) {
			if (_x < _centerX)
				return 'w';
			else
				return 'e';
		} else {
			if (_y < _centerY)
				return 'n';
			else
				return 's';
		}
	}

	/**
	 * Retorna um objeto <code>Aim</code> indicando a direo para a qual este
	 * vetor aponta.
	 * 
	 * @author edgardleal
	 * @since 01/11/2011
	 * @return objeto Aim
	 */
	public Aim getDirection() {
		return Aim.fromSymbol(getSimbol());
	}

	/**
	 * Retorna a distancia entre a estremidade do vetor e o seu centro.
	 * 
	 * @author edgardleal
	 * @since 01/11/2011
	 * @return double indicando a distancia(Raio) entro o centro e a extremidade
	 */
	public double getDistance() {
		return Math.sqrt(Math.pow(_x - _centerX, 2)
				+ Math.pow(_y - _centerY, 2));
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Comparable#compareTo(java.lang.Object)
	 */
	@Override
	public int compareTo(Vector v) {
		return (int) Math.abs(this.getDistance() - v.getDistance());
	}

	public static double getDistance(int x1, int y1, int x2, int y2) {
		return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
	}

	public int getX() {
		return _x;
	}

	public void setX(int x) {
		_x = x;
	}

	public int getY() {
		return _y;
	}

	public void setY(int y) {
		_y = y;
	}

	public int getCenterY() {
		return _centerY;
	}

	public void setCenterY(int centerY) {
		_centerY = centerY;
	}

	public int getCenterX() {
		return _centerX;
	}

	public void setCenterX(int centerX) {
		_centerX = centerX;
	}
	
	
}
